home *** CD-ROM | disk | FTP | other *** search
/ Trusted Irix /B 4.0.4 / Trusted-Irix B-4.0.1.iso / dist / eoe1.idb / usr / include / sys / tsreg.h.z / tsreg.h
C/C++ Source or Header  |  1992-04-03  |  5KB  |  151 lines

  1. /*
  2.  * Device registers for the ISI VME-QIC2/X cartridge tape controller.
  3.  *
  4.  * $Revision: 3.5 $
  5.  */
  6.  
  7. /*
  8.  * Controller registers
  9.  */
  10. struct    tsdevice {
  11.     ushort    tcpr;        /* write: low word of data buffer address */
  12.     ushort    txcpr;        /* write: high word of data buf addr */
  13.     ushort    clkreg;        /* read/write: clock register (not used) */
  14.     ushort    atxcpr;        /* write: alternate dba */
  15. };
  16. #define    tssr    txcpr        /* read: status register */
  17.  
  18. #define    TXCPR_RESET    0x8000    /* subsystem clear */
  19. #define    TXCPR_RETENSION    0xC000    /* tape retention */
  20.  
  21. /* bits in tssr status register */
  22. #define    TSSR_SC        0x8000        /* special condition (error) */
  23. #define    TSSR_RMR    0x1000        /* register modification refused */
  24. #define    TSSR_NXM    0x0800        /* nonexistant memory */
  25. #define    TSSR_NBA    0x0400        /* need buffer address */
  26. #define    TSSR_SSR    0x0080        /* subsytem ready */
  27. #define    TSSR_OFL    0x0040        /* off-line */
  28. #define    TSSR_TC        0x000E        /* termination codes */
  29.  
  30. /* termination codes */
  31. #define    TSTC_OK        0x0000    /* TC0: normal termination */
  32. #define    TSTC_ATTN    0x0002    /* TC1: attention */
  33. #define    TSTC_ALERT    0x0004    /* TC2: tape status alert */
  34. #define    TSTC_REJECT    0x0006    /* TC3: function reject */
  35. #define    TSTC_UNREC0    0x0008    /* TC4: unrecoverable, tape position lost */
  36. #define    TSTC_UNREC1    0x000A    /* TC5: unrecoverable, tape position lost */
  37. #define    TSTC_UNREC2    0x000C    /* TC6: unrecoverable, tape position lost */
  38. #define    TSTC_FATAL    0x000E    /* TC7: fatal error */
  39.  
  40. /* status message */
  41. struct    tsstatus {
  42.     ushort    header;        /* packet header */
  43.     ushort    len;        /* packet length */
  44.     ushort    rbpcr;        /* residual frame count */
  45.     ushort    xs0;        /* see bits defined below */
  46.     ushort    xs1;        /* see bits defined below */
  47.     ushort    xs2;        /* always zero */
  48.     ushort    xs3;        /* see bits defined below */
  49.     ushort    pad;        /* not used */
  50. };
  51. /* bits header */
  52. #define    TSX_ACK    0x8000        /* acknowledge */
  53.  
  54. /* Error codes in xstat 0 */
  55. #define    XS0_TMK    0x8000        /* tape mark detected */
  56. #define    XS0_RLS    0x4000        /* record length short */
  57. #define    XS0_LET    0x2000        /* logical end of tape */
  58. #define    XS0_RLL    0x1000        /* record length long */
  59. #define    XS0_WLE    0x0800        /* write lock error */
  60. #define    XS0_NEF    0x0400        /* non-executable function */
  61. #define    XS0_ILC    0x0200        /* illegal command */
  62. #define    XS0_ILA    0x0100        /* illegal address */
  63. #define    XS0_ONL    0x0040        /* on-line */
  64. #define    XS0_IE    0x0020        /* interrupt enable status */
  65. #define    XS0_WLK    0x0004        /* write locked */
  66. #define    XS0_BOT    0x0002        /* beginning of tape */
  67. #define    XS0_EOT    0x0001        /* end of tape */
  68.  
  69. /* Error codes in xstat 1 */
  70. #define    XS1_UNC    0x0002        /* uncorrectable data */
  71.  
  72. /* Error codes in xstat 3 */
  73. #define    XS3_REV    0x0020        /* tape motion is reverse */
  74. #define    XS3_RIB    0x0001        /* reverse into BOT */
  75.  
  76. /* command message */
  77. struct tscmd {
  78.     ushort    cmd;        /* command */
  79.     ushort    balo;        /* low order buffer address */
  80.     ushort    bahi;        /* high order buffer address */
  81.     ushort    bytecount;
  82. };
  83.  
  84. /* commands and command bits */
  85. #define    TSCMD_ACK    0x8000        /* ack - release command packet */
  86. #define    TSCMD_MUSTBEONE    0x4000        /* must be one */
  87. #define TSCMD_SWB_    0x1000        /* don't swap bytes (active low) */
  88. #define    TSCMD_IE    0x0080        /* interrupt enable */
  89.  
  90. #define    TSCMD_READ    0x0001        /* read data */
  91. #define    TSCMD_WRITECHAR    0x0004        /* write characteristics */
  92. #define    TSCMD_WRITE    0x0005        /* write data */
  93. #define    TSCMD_FSR    0x0008        /* forward space record */
  94. #define    TSCMD_FSF    0x0208        /* forward space file */
  95. #define    TSCMD_REWIND    0x0408        /* rewind */
  96. #define    TSCMD_WFMK    0x0009        /* write file mark */
  97. #define    TSCMD_RESET    0x000B        /* initialize controller */
  98. #define    TSCMD_SENSE    0x000F        /* get status */
  99. #define    TSCMD_CMD    0x0F1F        /* bits that commands use */
  100. #define    TSCMD_RETENSION    0x7FFF        /* retension pseudo-command */
  101.  
  102. /* characteristics data */
  103. struct tschar {
  104.     ushort    balo;            /* low address of status packet */
  105.     ushort    bahi;            /* high address of status packet */
  106.     ushort    bytecount;        /* its size */
  107.     ushort    mode;            /* characteristics */
  108. };
  109.  
  110. /* bits in characteristics mode */
  111. #define    TSCHAR_ESS    0x0080        /* enable skip tape marks stop */
  112. #define    TSCHAR_ENB    0x0040        /* enable tape mark stop off BOT */
  113. #define    TSCHAR_RAW    0x0008        /* enable non-block mode */
  114. #define    TSCHAR_Q11    0x0004        /* use qic-11 mode */
  115. #define    TSCHAR_FMT    0x0002        /* enable format */
  116.  
  117. /*
  118.  * Software state per tape drive.
  119.  */
  120. #define    TSBUFSIZE    4096
  121. struct    tssoftc {
  122.     short    sc_flags;        /* state flags */
  123.     char    sc_ctlr;        /* controller # */
  124.     int    sc_id;            /* timeout id */
  125.     long    sc_ticks;        /* # of timeout ticks left */
  126.     volatile struct tsdevice *sc_device;
  127.     struct    tscmd sc_cmd;        /* the command packet */
  128.     struct    tschar sc_char;        /* characteristics packet */
  129.     struct    tsstatus sc_status;    /* status block */
  130. };
  131.  
  132. /* software state of the drive */
  133. #define    TSC_PROBED        0x0001    /* controller probed */
  134. #define    TSC_INITIALIZED        0x0002    /* has been initialized */
  135. #define    TSC_OPEN        0x0004    /* device is open and in use */
  136. #define    TSC_BUSY        0x0008    /* busy */
  137. #define    TSC_WAITING        0x0010    /* somebody want's a wakeup */
  138. #define    TSC_WRITTEN        0x0020    /* tape has been written */
  139. #define    TSC_READ        0x0040    /* tape has been read */
  140. #define    TSC_BUSTED        0x0080    /* things are busted/hard error */
  141. #define    TSC_REWINDING        0x0100    /* tape is rewinding */
  142. #define    TSC_RETENSIONING    0x0200    /* tape is retensioning */
  143. #define    TSC_ERROR        0x0400    /* error on last command */
  144. #define    TSC_FILEMARK        0x0800    /* file mark seen */
  145.  
  146. #ifdef    _KERNEL
  147. extern    struct tssoftc tssoftc[];
  148. extern    int tsctlrs;
  149. extern    char tsbuf[][TSBUFSIZE];
  150. #endif
  151.